#ifndef GUARD_NUTSHELL_H
#define GUARD_NUTSHELL_H

#include <iostream>
#include <map>
#include <stdexcept>
#include <string>
#include <unistd.h>
#include <vector>

#include "Alias.h"
#include "BuiltIn.h"
#include "Cd.h"
#include "Command.h"
#include "Command_Completion.h"
#include "Scanner.h"
#include "Set.h"

namespace nutshell 
{
	class Nutshell
	{
	public:
		Nutshell(){};
		int start();
		
	private:
		std::vector<nutshell::Command*> parseCommands( std::vector<std::string> );
		void runCommands( std::vector<nutshell::Command*>& );
		void runCommands_aux( std::vector<nutshell::Command*>& );
		Set mySet;
		Cd myCd;
		Scanner myScanner;
		Alias myAlias;
		std::map<std::string, nutshell::BuiltIn*> built_ins;
	};
	
		
}

#endif
